' 6 225444 Fix taken at 22:54:44 UTC
' 7 A Data valid
- ' $GPRMC - Recommended minimum specific GNSS Data\r
- ' $GPRMC,085721.194,A,5917.7210,N,01103.9227,E,21.42,50.33,300504,,*07\r
- ' 2 085721 Fix taken at 08:57:21 UTC\r
- ' 3 A Fix valid (this field reads V if fix is not valid)\r
- ' 4,5 5917.7210,N Latitude 59 deg 17.7210' N\r
- ' 6,7 01103.9227,E Longitude 11 deg 03.9227' E\r
- ' 8 21.42 Speed over ground (knots)\r
- ' 9 50.33 Course over ground (true)\r
- ' 10 300504 Date 30/05-2004\r
- ' 11 Empty field Magnetic variation\r
-\r
-\r
+ ' $GPRMC - Recommended minimum specific GNSS Data
+ ' $GPRMC,085721.194,A,5917.7210,N,01103.9227,E,21.42,50.33,300504,,*07
+ ' 2 085721 Fix taken at 08:57:21 UTC
+ ' 3 A Fix valid (this field reads V if fix is not valid)
+ ' 4,5 5917.7210,N Latitude 59 deg 17.7210' N
+ ' 6,7 01103.9227,E Longitude 11 deg 03.9227' E
+ ' 8 21.42 Speed over ground (knots)
+ ' 9 50.33 Course over ground (true)
+ ' 10 300504 Date 30/05-2004
+ ' 11 Empty field Magnetic variation
+
+
' The optional checksum field consists of a "*" and two hex digits repre-
' senting the exclusive OR of all characters between, but not including,
' the "$" and "*". A checksum is required on some sentences.
****************************************/
/*
- * An input file may have both GGA and GLL and RMC sentences for the exact \r
- * same position fix. If we see a single GGA, start ignoring GLL's and RMC's.\r
- * GLL's will also be ignored if RMC's are found and GGA's not found.\r
+ * An input file may have both GGA and GLL and RMC sentences for the exact
+ * same position fix. If we see a single GGA, start ignoring GLL's and RMC's.
+ * GLL's will also be ignored if RMC's are found and GGA's not found.
*/
- \r
+
typedef enum {
gp_unknown = 0,
gpgga,
- gplgll,\r
- gprmc\r
+ gplgll,
+ gprmc
} preferred_posn_type;
static FILE *file_in;
}
static void
-gprmc_parse(char *ibuf)\r
-{\r
- double latdeg, lngdeg;\r
- char lngdir, latdir;\r
- double hms;\r
- double speed, course;\r
- char fix;\r
- struct tm tm;\r
- waypoint *waypt;\r
-\r
- if (trk_head == NULL) {\r
- trk_head = route_head_alloc();\r
- track_add_head(trk_head);\r
- }\r
-\r
- waypt = waypt_new();\r
-\r
- memset(&tm, 0, sizeof(tm));\r
-\r
- sscanf(ibuf,"$GPRMC,%f,%c,%lf,%c,%lf,%c,%lf,%lf",\r
- &hms, &fix, &latdeg, &latdir,\r
- &lngdeg, &lngdir,\r
- &speed, &course);\r
-\r
- tm.tm_sec = (long) hms % 100;\r
- hms = hms / 100;\r
- tm.tm_min = (long) hms % 100;\r
- hms = hms / 100;\r
- tm.tm_hour = (long) hms % 100;\r
-\r
- waypt->creation_time = mktime(&tm) + get_tz_offset() + current_time();\r
-\r
- if (latdir == 'S') latdeg = -latdeg;\r
- waypt->latitude = ddmm2degrees(latdeg);\r
-\r
- if (lngdir == 'W') lngdeg = -lngdeg;\r
- waypt->longitude = ddmm2degrees(lngdeg);\r
-\r
- route_add_wpt(trk_head, waypt);\r
-}\r
-\r
-static void\r
+gprmc_parse(char *ibuf)
+{
+ double latdeg, lngdeg;
+ char lngdir, latdir;
+ double hms;
+ double speed, course;
+ char fix;
+ struct tm tm;
+ waypoint *waypt;
+
+ if (trk_head == NULL) {
+ trk_head = route_head_alloc();
+ track_add_head(trk_head);
+ }
+
+ waypt = waypt_new();
+
+ memset(&tm, 0, sizeof(tm));
+
+ sscanf(ibuf,"$GPRMC,%f,%c,%lf,%c,%lf,%c,%lf,%lf",
+ &hms, &fix, &latdeg, &latdir,
+ &lngdeg, &lngdir,
+ &speed, &course);
+
+ tm.tm_sec = (long) hms % 100;
+ hms = hms / 100;
+ tm.tm_min = (long) hms % 100;
+ hms = hms / 100;
+ tm.tm_hour = (long) hms % 100;
+
+ waypt->creation_time = mktime(&tm) + get_tz_offset() + current_time();
+
+ if (latdir == 'S') latdeg = -latdeg;
+ waypt->latitude = ddmm2degrees(latdeg);
+
+ if (lngdir == 'W') lngdeg = -lngdeg;
+ waypt->longitude = ddmm2degrees(lngdeg);
+
+ route_add_wpt(trk_head, waypt);
+}
+
+static void
gpwpl_parse(char *ibuf)
{
waypoint *waypt;
posn_type = gpgga;
gpgga_parse(ibuf);
} else
- if (0 == strncmp(ibuf, "$GPRMC,", 7)) {\r
+ if (0 == strncmp(ibuf, "$GPRMC,", 7)) {
if (posn_type != gpgga) {
- posn_type = gprmc;\r
- gprmc_parse(ibuf);\r
- } \r
- } else\r
- if (0 == strncmp(ibuf, "$GPGLL,", 7)) {\r
- if ((posn_type != gpgga) && (posn_type != gprmc)) {\r
+ posn_type = gprmc;
+ gprmc_parse(ibuf);
+ }
+ } else
+ if (0 == strncmp(ibuf, "$GPGLL,", 7)) {
+ if ((posn_type != gpgga) && (posn_type != gprmc)) {
gpgll_parse(ibuf);
}
} else